package com.cskaoyan.utils;

import lombok.SneakyThrows;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

/**
 * Date转换工具类
 *
 * @author liusenbiao
 * @version 1.0
 */
public class DateFormatUtils {
    /**
     * String类型转换成Date
     *
     * @param dateStr 字符串格式时间
     * @return Date 日期格式时间
     */
    public static Date str2Date(String dateStr) {
        if (dateStr == null) return null;
        Date parse = null;
        try {
            parse = new Date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr).getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse;
    }

    /**
     * String类型转化为Date
     *
     * @param dateStr 字符串格式时间
     * @param pattern 时间显示模式
     * @return sql.Date
     */
    @SneakyThrows
    public static Date str2Date(String dateStr, String pattern) {
        Date parse = new Date(new SimpleDateFormat(pattern, Locale.US).parse(dateStr).getTime());
        return parse;
    }

    /**
     * 把毫秒时间转化为"yyyy-MM-dd HH:mm:ss" 的 sql Date类型
     *
     * @param currentTimeMillis
     * @return
     */
    public static Date long2Date(long currentTimeMillis) {
        Date date = new Date(currentTimeMillis);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = simpleDateFormat.format(date);
        Date resDate = null;
        try {
            resDate = new Date(simpleDateFormat.parse(dateStr).getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return resDate;
    }


    /**
     * 日期格式化：Sat Jul 10 10:32:25 CST 2021 转化成 "yyyy-MM-dd HH:mm:ss"
     * @param normalDate date格式日期
     * @return String "yyyy-MM-dd HH:mm:ss"格式日期
     */
    public static String date2Str(Date normalDate){
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(normalDate);
    }

    /**
     *
     * "yyyy-MM-dd HH:mm:ss" String类型时间增加指定天数
     * @param originDateStr 起始日期
     * @param addDays 增加天数
     * @return  Date 增加后日期
     */
    public static Date addDays(String originDateStr, Integer addDays){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date originDate = null;
        try {
            originDate = new Date(simpleDateFormat.parse(originDateStr).getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(originDate);
        calendar.add(Calendar.DATE ,addDays);
        Date newDate = new Date(calendar.getTime().getTime());
        return newDate;
    }


    /**
     *
     * long类型时间增加指定天数
     * @param originMillis 起始时间
     * @param addDays 增加天数
     * @return  Date 增加后日期
     */
    public static Date addDays(Long originMillis, Integer addDays){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date(originMillis));
        calendar.add(Calendar.DATE ,addDays);
        return new Date(calendar.getTime().getTime());

    }

}
